// 顶层模块
module 1_3_top(
    input clk,
    input rst,
    input key_1_i,                //第1个按键输入，即“切换”键
    input key_2_i,                //第2个按键输入，即“调整”键
    input key_3_i,                //第3个按键输入，即“增加”键
    input key_4_i,                //第4个按键输入，即“减小”键

    output wire [5:0] sel,       //数码管位选信号
    output wire [7:0] seg,       //数码管段选信号
    output wire  beep            //闹钟蜂鸣器信号          
);

//定义消抖后的4个按键
wire key_1_o;
wire key_2_o;
wire key_3_o;
wire key_4_o;

//数码管的二进制数
wire	[7:0]	Number1;        //当前数码管一，二位显示的数字的二进制数
wire    [7:0]	Number2;        //当前数码管三，四位显示的数字的二进制数
wire    [7:0]	Number3;        //当前数码管五，六位显示的数字的二进制数

//数码管的BCD码
wire	[7:0]
		bcd1 ,					//当前数码管一，二位显示的数字的BCD码
		bcd2 ,					//当前数码管三，四位显示的数字的BCD码
		bcd3 ;					//当前数码管五，六位显示的数字的BCD码

wire	[2:0]	dance;          //闪动信号，用于调整部分的亮和灭
wire	flag ;                  //闹钟信号
wire    key;                    //按第四个按键取消闹钟的信号

//例化闹钟模块
alarm	inst_alarm(
    .clk	    ( clk     ),
    .rst	    ( rst     ),
    .key	    ( key     ),
    .flag	    ( flag    ),
    .beep	    ( beep    )
);

//例化控制模块
contro u_control(
    .clk        ( clk     ),
    .rst        ( rst     ),
    .key_1_o    ( key_1_o ),
    .key_2_o    ( key_2_o ),
    .key_3_o    ( key_3_o ),
    .key_4_o    ( key_4_o ),
    .Number1    ( Number1 ),    
    .Number2    ( Number2 ),   
    .Number3    ( Number3 ),  
    .dance      ( dance   ),
    .key        ( key     ),
    .flag       ( flag    )
);

//例化数码管显示模块
detector_clk	u_detector_clk(
    .clk 		( clk     ),
    .rst 		( rst     ),
    .number1	( bcd1    ),
    .number2	( bcd2    ),
    .number3	( bcd3    ),
    .dp 		(6'b101011),
    .dance 		( dance   ),
    .seg 		( seg     ),
    .sel        ( sel     )
);

//例化二进制转BCD码模块       
BinToBCD_clock	u_BinToBCD_clock1(
    .bin 	    ( Number1 ),
    .bcd 	    ( bcd1    )
);

BinToBCD_clock	u_BinToBCD_clock2(
    .bin 	    ( Number2 ),
    .bcd 	    ( bcd2    )
);

BinToBCD_clock	u_BinToBCD_clock3(
    .bin 	    ( Number3 ),
    .bcd 	    ( bcd3    )
);



//例化按键消抖模块       
dither_button_clock	u_dither_button_clock1(
    .clk 		( clk     ),
    .rst 		( rst     ),
    .key_in 	( key_1_i ),
    .key_out	( key_1_o )
);

dither_button_clock	u_dither_button_clock2(
    .clk 		( clk     ),
    .rst 		( rst     ),
    .key_in 	( key_2_i ),
    .key_out	( key_2_o )
);

dither_button_clock	u_dither_button_clock3(
    .clk 		( clk     ),
    .rst 		( rst     ),
    .key_in 	( key_3_i ),
    .key_out	( key_3_o )
); 

dither_button_clock	u_dither_button_clock4(
    .clk 		( clk     ),
    .rst 		( rst     ),
    .key_in 	( key_4_i ),
    .key_out	( key_4_o )
);

endmodule

